package cn.lliiooll.cmd;

import cn.lliiooll.config.Config;
import cn.lliiooll.util.Utils;
import org.bukkit.command.*;

import java.util.ArrayList;
import java.util.List;

import static cn.lliiooll.HelpMe.pre;


public class MainCmd implements TabExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (args.length < 1) {// 无arg
            if (sender.hasPermission("helpme.use")) {
                info("&b==========&e[ &7HelpMe &e]&b==========", sender);
                info("&e/hm\n&2插件帮助", sender);
                info("&e/hm reload\n&2重载配置", sender);
                info("&e/hm append [内容]\n&2向主帮助列表末添加一行[内容]", sender);
                info("&e/hm append [内容] [行数]\n&2向主帮助列表的第[行数]添加一行[内容]", sender);
                info("&e/hm delete [行数]\n&2从主帮助列表删除指定[行数]的内容", sender);
                info("&e/hm sub create [名称]\n&2添加一个名为[名称]的子指令帮助", sender);
                info("&e/hm sub append [名称] [内容]]\n&2向名为[名称]的子指令的帮助列表的末尾添加一行[内容]", sender);
                info("&e/hm sub append [名称] [内容] [行数]\n&2向名为[名称]的子指令的帮助列表的第[行数]添加一行[内容]", sender);
                info("&e/hm sub delete [名称] [行数]\n&2从名为[名称]的子指令的帮助列表里删除指定[行数]的内容", sender);
                info("&e/hm sub remove [名称]\n&2删除一个名为[名称]的子指令帮助", sender);

            } else {
                info("&c你没有权限!", sender);
            }
        } else {
            if (args[0].equalsIgnoreCase("reload")) {
                if (sender.hasPermission("helpme.reload")) {
                    info("&2配置重载中...", sender);
                    if (Config.reload() && Config.reloadAllSub()) info("&2配置重载完毕!", sender);
                    else info("&2出了亿点错误,请在控制台查看", sender);
                } else {
                    info("&c你没有权限!", sender);
                }
            } else if (args[0].equalsIgnoreCase("append")) {
                if (sender.hasPermission("helpme.append")) {
                    if (args.length < 2) {
                        info("&c内容不可为空!", sender);
                    } else {
                        if (args.length < 3) {
                            Config.list.add(args[1]);
                        } else {
                            if (!Utils.isNumeric(args[2])) {
                                info("&c行数必须为数字!", sender);
                                return true;
                            }
                            int line = Integer.parseInt(args[2]) - 1;
                            if (line >= Config.list.size()) {
                                info("&c不存在的行数!", sender);
                                return true;
                            }
                            Config.list.add(line, args[1]);
                        }
                        info("&2成功~", sender);
                    }
                } else {
                    info("&c你没有权限!", sender);
                }
            } else if (args[0].equalsIgnoreCase("delete")) {
                if (sender.hasPermission("helpme.delete")) {
                    if (args.length < 2) {
                        info("&c行数不可为空!", sender);
                    } else {
                        if (!Utils.isNumeric(args[1])) {
                            info("&c行数必须为数字!", sender);
                            return true;
                        }
                        int line = Integer.parseInt(args[1]) - 1;
                        if (line >= Config.list.size()) {
                            info("&c不存在的行数!", sender);
                            return true;
                        }
                        Config.list.remove(line);
                        info("&2成功~", sender);
                    }
                } else {
                    info("&c你没有权限!", sender);
                }
            } else if (args[0].equalsIgnoreCase("sub")) {
                if (args.length < 2) {
                    if (sender.hasPermission("helpme.sub.use")) {
                        info("&b==========&e[ &7HelpMe &e]&b==========", sender);
                        info("&e/hm sub create [名称]\n&2添加一个名为[名称]的子指令帮助", sender);
                        info("&e/hm sub append [名称] [内容]]\n&2向名为[名称]的子指令的帮助列表的末尾添加一行[内容]", sender);
                        info("&e/hm sub append [名称] [内容] [行数]\n&2向名为[名称]的子指令的帮助列表的第[行数]添加一行[内容]", sender);
                        info("&e/hm sub delete [名称] [行数]\n&2从名为[名称]的子指令的帮助列表里删除指定[行数]的内容", sender);
                        info("&e/hm sub remove [名称]\n&2删除一个名为[名称]的子指令帮助", sender);
                    }else {
                        info("&c你没有权限!", sender);
                    }
                } else {
                    if (args[1].equalsIgnoreCase("create")) {
                        if (sender.hasPermission("helpme.sub.create")) {
                            if (args.length < 3) {
                                info("&c名称不可为空!", sender);
                            } else {
                                Config.createSub(args[2]);
                                info("&2创建成功!", sender);
                            }
                        } else {
                            info("&c你没有权限!", sender);
                        }
                    }else if (args[1].equalsIgnoreCase("remove")) {
                        if (sender.hasPermission("helpme.sub.remove")) {
                            if (args.length < 3) {
                                info("&c名称不可为空!", sender);
                            } else {
                                if (!Config.hasSub(args[2])){
                                    info("&c子指令不存在!", sender);
                                }else {
                                    Config.removeSub(args[2]);
                                    info("&2删除成功!", sender);
                                }
                            }
                        } else {
                            info("&c你没有权限!", sender);
                        }
                    } else if (args[1].equalsIgnoreCase("append")) {
                        if (sender.hasPermission("helpme.sub.append")) {
                            if (args.length < 3) {
                                info("&c名称不可为空!", sender);
                            } else {
                                if (args.length < 4) {
                                    info("&c内容不可为空!", sender);
                                } else {
                                    if (args.length < 5) {
                                        Config.getSub(args[2]).append(args[3]);
                                    } else {
                                        if (!Utils.isNumeric(args[4])) {
                                            info("&c行数必须为数字!", sender);
                                            return true;
                                        }
                                        int line = Integer.parseInt(args[4]) - 1;
                                        if (line >= Config.list.size()) {
                                            info("&c不存在的行数!", sender);
                                            return true;
                                        }
                                        Config.getSub(args[2]).append(line, args[3]);
                                    }
                                }
                                info("&2成功~", sender);
                            }
                        } else {
                            info("&c你没有权限!", sender);
                        }
                    } else if (args[1].equalsIgnoreCase("delete")) {
                        if (sender.hasPermission("helpme.sub.delete")) {
                            if (args.length < 3) {
                                info("&c行数不可为空!", sender);
                            } else {
                                if (!Utils.isNumeric(args[1])) {
                                    info("&c行数必须为数字!", sender);
                                    return true;
                                }
                                int line = Integer.parseInt(args[1]) - 1;
                                if (line >= Config.getSub(args[2]).size()) {
                                    info("&c不存在的行数!", sender);
                                    return true;
                                }
                                Config.getSub(args[2]).delete(line);
                                info("&2成功~", sender);
                            }
                        } else {
                            info("&c你没有权限!", sender);
                        }
                    } else {
                        info("&c未知指令。请使用/hm sub来获取插件帮助", sender);
                    }
                }
            } else {
                info("&c未知指令。请使用/hm来获取插件帮助", sender);
            }
        }
        return true;
    }

    @Override
    public List<String> onTabComplete(CommandSender commandSender, Command command, String label, String[] args) {
        if (args.length < 1) return new ArrayList<String>() {{
            add("append");
            add("reload");
            add("delete");
            add("sub");
        }};
        else {
            if (args[0].equalsIgnoreCase("sub")) {
                if (args.length < 3) {
                    if (args[1].equalsIgnoreCase("delete")) {
                        return Config.getAllSub();
                    } else if (args[1].equalsIgnoreCase("append")) {
                        return Config.getAllSub();
                    }
                } else
                    return new ArrayList<String>() {{
                        add("create");
                        add("append");
                        add("delete");
                    }};
            } else if (args[0].equalsIgnoreCase("delete")) {
                return new ArrayList<String>() {{
                    for (int i = 0; i < Config.list.size(); i++) {
                        add(i + "");
                    }
                }};
            }
        }
        return new ArrayList<>();
    }

    public static void info(String msg, CommandSender sender) {
        sender.sendMessage(pre + msg.replaceAll("&", "§"));
    }

}
